import axios from 'axios'
import qs from 'qs'
import { getToken, removeToken } from '../utils/auth'
import router from '../router'

// 创建axios实例
const service = axios.create({
  baseURL: import.meta.env.VITE_API_URL || 'http://localhost:9999', // 从环境变量获取API URL
  timeout: 50000, // 全局超时时间
  paramsSerializer: {
    serialize: (params) => {
      return qs.stringify(params, { arrayFormat: 'repeat' })
    }
  }
})

// 请求拦截器需要修改为与 pig-ui 一致
service.interceptors.request.use(
  config => {
    // 如果请求头中已经有skipToken标记，则不添加token
    if (config.headers.skipToken) {
      return config;
    }
    
    // 添加token到请求头
    const token = getToken()
    if (token) {
      // pig-ui 中使用的是 Bearer 前缀
      config.headers['Authorization'] = `Bearer ${token}`
    }

    // 自动适配URL
    if (config.url) {
      config.url = adaptationUrl(config.url)
    }

    return config
  }, 
  error => {
    console.error('请求错误', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    const res = response.data
    
    // 根据后端返回的状态码判断请求是否成功
    if (res.code === 1) {
      return Promise.reject(res)
    }
    
    return res
  },
  error => {
    // 处理token过期等特殊错误
    if (error.response && error.response.status === 424) {
      // 显示消息提示
      alert('令牌状态已过期，请重新登录')
      // 清除token
      removeToken()
      // 跳转到登录页
      router.push('/login')
      return Promise.reject(error)
    }
    
    return Promise.reject(error.response?.data || error)
  }
)

// 适配不同架构的URL
function adaptationUrl(url) {
  if (!url) return url
  // 这里可以根据需要实现URL适配逻辑
  return url
}

export default service